<div class="refentry" lang="en" xml:lang="en"><a id="glLogicOp"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>glLogicOp — specify a logical pixel operation for color index rendering</p></div><div class="refsynopsisdiv"><h2>C Specification</h2><div class="funcsynopsis"><table><tr><td><code class="funcdef">void <b class="fsfunc">glLogicOp</b>(</code></td><td>GLenum  </td><td><var class="pdparam">opcode</var><code>)</code>;</td></tr></table></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="parameters"></a><h2>Parameters</h2><div class="variablelist"><dl><dt><span class="term"><em class="parameter"><code>opcode</code></em></span></dt><dd><p>
                    Specifies a symbolic constant that selects a logical operation.
                    The following symbols are accepted:
                    <code class="constant">GL_CLEAR</code>,
                    <code class="constant">GL_SET</code>,
                    <code class="constant">GL_COPY</code>,
                    <code class="constant">GL_COPY_INVERTED</code>,
                    <code class="constant">GL_NOOP</code>,
                    <code class="constant">GL_INVERT</code>,
                    <code class="constant">GL_AND</code>,
                    <code class="constant">GL_NAND</code>,
                    <code class="constant">GL_OR</code>,
                    <code class="constant">GL_NOR</code>,
                    <code class="constant">GL_XOR</code>,
                    <code class="constant">GL_EQUIV</code>,
                    <code class="constant">GL_AND_REVERSE</code>,
                    <code class="constant">GL_AND_INVERTED</code>,
                    <code class="constant">GL_OR_REVERSE</code>, and
                    <code class="constant">GL_OR_INVERTED</code>. The initial value is <code class="constant">GL_COPY</code>.
                </p></dd></dl></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="description"></a><h2>Description</h2><p>
            <code class="function">glLogicOp</code> specifies a logical operation that,
            when enabled,
            is applied between the incoming color index or RGBA color
            and the color index or RGBA color at the corresponding location in the
            frame buffer.
            To enable or disable the logical operation, call
            <a class="citerefentry" href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a> and <a class="citerefentry" href="glDisable"><span class="citerefentry"><span class="refentrytitle">glDisable</span></span></a>
            using the symbolic constant <code class="constant">GL_COLOR_LOGIC_OP</code> for RGBA mode or
            <code class="constant">GL_INDEX_LOGIC_OP</code> for color index mode. The initial value is
            disabled for both operations.
        </p><p>
        </p><div class="informaltable"><table><colgroup><col /><col /></colgroup><thead><tr><th><span class="bold"><strong>
                        Opcode
                        </strong></span></th><th><span class="bold"><strong>
                        Resulting Operation
                        </strong></span></th></tr></thead><tbody><tr><td>
                        <code class="constant">GL_CLEAR</code>
                        </td><td class="center">
                        0
                        </td></tr><tr><td>
                        <code class="constant">GL_SET</code>
                        </td><td class="center">
                        1
                        </td></tr><tr><td>
                        <code class="constant">GL_COPY</code>
                        </td><td class="center">
                        s
                        </td></tr><tr><td>
                        <code class="constant">GL_COPY_INVERTED</code>
                        </td><td class="center">
                        ~s
                        </td></tr><tr><td>
                        <code class="constant">GL_NOOP</code>
                        </td><td class="center">
                        d
                        </td></tr><tr><td>
                        <code class="constant">GL_INVERT</code>
                        </td><td class="center">
                        ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_AND</code>
                        </td><td class="center">
                        s &amp; d
                        </td></tr><tr><td>
                        <code class="constant">GL_NAND</code>
                        </td><td class="center">
                        ~(s &amp; d)
                        </td></tr><tr><td>
                        <code class="constant">GL_OR</code>
                        </td><td class="center">
                        s | d
                        </td></tr><tr><td>
                        <code class="constant">GL_NOR</code>
                        </td><td class="center">
                        ~(s | d)
                        </td></tr><tr><td>
                        <code class="constant">GL_XOR</code>
                        </td><td class="center">
                        s ^ d
                        </td></tr><tr><td>
                        <code class="constant">GL_EQUIV</code>
                        </td><td class="center">
                        ~(s ^ d)
                        </td></tr><tr><td>
                        <code class="constant">GL_AND_REVERSE</code>
                        </td><td class="center">
                        s &amp; ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_AND_INVERTED</code>
                        </td><td class="center">
                        ~s &amp; d
                        </td></tr><tr><td>
                        <code class="constant">GL_OR_REVERSE</code>
                        </td><td class="center">
                        s | ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_OR_INVERTED</code>
                        </td><td class="center">
                        ~s | d
                        </td></tr></tbody></table></div><p>
            <em class="parameter"><code>opcode</code></em> is a symbolic constant chosen from the list above.
            In the explanation of the logical operations,
            <span class="emphasis"><em>s</em></span> represents the incoming color index and
            <span class="emphasis"><em>d</em></span> represents the index in the frame buffer.
            Standard C-language operators are used.
            As these bitwise operators suggest,
            the logical operation is applied independently to each bit pair of the
            source and destination indices or colors.
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="notes"></a><h2>Notes</h2><p>
            Color index logical operations are always supported. RGBA logical
            operations are supported only if the GL version is 1.1 or greater.
        </p><p>
            When more than one RGBA color or index buffer is enabled for drawing,
            logical operations are performed separately for each enabled buffer,
            using for the destination value the contents of that buffer
            (see <a class="citerefentry" href="glDrawBuffer"><span class="citerefentry"><span class="refentrytitle">glDrawBuffer</span></span></a>).
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="errors"></a><h2>Errors</h2><p>
            <code class="constant">GL_INVALID_ENUM</code> is generated if <em class="parameter"><code>opcode</code></em> is not an accepted value.
        </p><p>
            <code class="constant">GL_INVALID_OPERATION</code> is generated if <code class="function">glLogicOp</code>
            is executed between the execution of <a class="citerefentry" href="glBegin"><span class="citerefentry"><span class="refentrytitle">glBegin</span></span></a>
            and the corresponding execution of <a class="citerefentry" href="glEnd"><span class="citerefentry"><span class="refentrytitle">glEnd</span></span></a>.
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="associatedgets"></a><h2>Associated Gets</h2><p>
            <a class="citerefentry" href="glGet"><span class="citerefentry"><span class="refentrytitle">glGet</span></span></a> with argument <code class="constant">GL_LOGIC_OP_MODE</code>.
        </p><p>
            <a class="citerefentry" href="glIsEnabled"><span class="citerefentry"><span class="refentrytitle">glIsEnabled</span></span></a> with argument <code class="constant">GL_COLOR_LOGIC_OP</code> or <code class="constant">GL_INDEX_LOGIC_OP</code>.
        </p></div>
        {$pipelinestall}{$examples}
        <div class="refsect1" lang="en" xml:lang="en"><a id="seealso"></a><h2>See Also</h2><p>
            <a class="citerefentry" href="glAlphaFunc"><span class="citerefentry"><span class="refentrytitle">glAlphaFunc</span></span></a>,
            <a class="citerefentry" href="glBlendFunc"><span class="citerefentry"><span class="refentrytitle">glBlendFunc</span></span></a>,
            <a class="citerefentry" href="glDrawBuffer"><span class="citerefentry"><span class="refentrytitle">glDrawBuffer</span></span></a>,
            <a class="citerefentry" href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a>,
            <a class="citerefentry" href="glStencilOp"><span class="citerefentry"><span class="refentrytitle">glStencilOp</span></span></a>
        </p></div><div class="refsect1" lang="en" xml:lang="en"><div id="Copyright"><h2>Copyright</h2><p>
            Copyright © 1991-2006
            Silicon Graphics, Inc. This document is licensed under the SGI
            Free Software B License. For details, see
            <a class="ulink" href="https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/" target="_top">https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/</a>.
        </p></div></div></div>
